package com.bmft.signIn.scheduled;


import com.alibaba.fastjson.JSONArray;
import com.bmft.signIn.conf.YamlBeanConf;
import com.bmft.signIn.mail.MailWornUtil;
import com.bmft.signIn.socketAPI.PythonScriptTest_01;
import com.bmft.system.mapper.StudentMapper;
import com.bmft.system.pojo.Student;
import com.bmft.utils.StringUtils01;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;

import javax.mail.MessagingException;
import java.util.ArrayList;
import java.util.List;

/**
 * @Author Jarvan
 * @create 2020/9/6 13:49
 * 定时给所有数据库的成员打卡
 * * 没有电话和位置默认电话和位置，
 * * 如果打卡失败，发送邮件提醒
 */
@Service
public class SignInAllScheduled {
@Autowired
YamlBeanConf yamlBeanConf;
    @Autowired
    StudentMapper studentMapper;
    @Autowired
    MailWornUtil mailWornUtil;
    @Autowired
    PythonScriptTest_01 pythonScriptTest_01;
    List<String> stringList = new ArrayList<>();
    public List<String> signForAll(){
        signForAllSomeTime();
        return stringList;
    }

    /**
     * cron表达式 秒 分 时 日 月 周几
     * 要使用的时候去百度搜索，有生成器或者例子搬过来就能用。
     * 正则表达式也是.
     * 每天 14.05分钟(cron = "0 5 14 * * ?")
     * 每天凌晨 4点 开始依次 打卡\
     * 这里通过el表达式取值，yaml的值
     */
    @Scheduled(cron = "${bean.scheduledTime}")
    public void signForAllSomeTime(){
        List<Student> studentList = studentMapper.selectList(null);
        for (Student student : studentList) {
            if (StringUtils01.isNullOrEmpty(student.getPhoneNumber())){
                //如果手机号为空设置一个默认手机号
                student.setPhoneNumber(yamlBeanConf.getDefaultPhone());
            }
            if (StringUtils01.isNullOrEmpty(student.getLocation())){
                //如果位置为空的设置一个默认位置
                student.setLocation(yamlBeanConf.getDefaultLocation());
            }
            System.out.println("json="+JSONArray.toJSONString(student));
            //调用python
            String callPython = pythonScriptTest_01.callpython(JSONArray.toJSONString(student));
            stringList.add(student.getName()+"="+callPython);
            if (callPython.contains("200")){
                System.out.println("[python返回结果]="+callPython);
            }else {//如果打卡失败发邮件给我 使用异步发送
                System.err.println("===========打卡失败===========");
                try {
                    mailWornUtil.sendWornMailToAuthor(student);
                } catch (MessagingException e) {
                    e.printStackTrace();
                    System.err.println("===========邮件提醒失败===========");
                }
                System.err.println("===========邮件提醒成功===========");
            }

        }
    }


}
